diff --git a/metatag.module b/metatag.module
index ce1514c..4e4c961 100644
--- a/metatag.module
+++ b/metatag.module
@@ -1,8 +1,12 @@
 <?php
 
 /**
+ * DO NOT USE THIS MODULE ON ANYTHING RESEMBLING A PRODUCTION SITE. IT IS NOT
+ * FINISHED, THE APIS ARE NOT YET LOCKED, AND THIS DOESN'T ACTUALLY WORK YET.
+ *
  * @todo Add revisionable support for metatag data.
  * @todo Add multilingual support for metatag data - is this even needed?
+ *
  */
 
 /**
@@ -80,89 +84,6 @@ function metatag_permission() {
 }
 
 /**
- * Implements hook_menu().
- */
-function metatag_menu() {
-  $items['admin/config/search/metatags'] = array(
-    'title' => 'Meta tags',
-    'description' => 'Configure meta tag defaults.',
-    'page callback' => 'metatag_config_overview',
-    'access arguments' => array('administer meta tags'),
-    'file' => 'metatag.admin.inc',
-  );
-  $items['admin/config/search/metatags/config'] = array(
-    'title' => 'Defaults',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['admin/config/search/metatags/config/add'] = array(
-    'title' => 'Add a meta tag default',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('metatag_config_add_form'),
-    'access arguments' => array('administer meta tags'),
-    'file' => 'metatag.admin.inc',
-    'type' => MENU_LOCAL_ACTION,
-  );
-  $items['admin/config/search/metatags/config/%metatag_config'] = array(
-    'title callback' => 'metatag_config_title',
-    'title arguments' => array(5),
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('metatag_config_edit_form', 5),
-    'access arguments' => array('administer meta tags'),
-    'file' => 'metatag.admin.inc',
-  );
-  $items['admin/config/search/metatags/config/%metatag_config/edit'] = array(
-    'title' => 'Edit',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['admin/config/search/metatags/config/%metatag_config/enable'] = array(
-    'title' => 'Enable',
-    'page callback' => 'metatag_config_enable',
-    'page arguments' => array(5),
-    'access callback' => 'metatag_config_access',
-    'access arguments' => array('enable', 5),
-    'file' => 'metatag.admin.inc',
-  );
-  $items['admin/config/search/metatags/config/%metatag_config/disable'] = array(
-    'title' => 'Disable',
-    'page callback' => 'metatag_config_disable',
-    'page arguments' => array(5),
-    'access callback' => 'metatag_config_access',
-    'access arguments' => array('disable', 5),
-    'file' => 'metatag.admin.inc',
-  );
-  $items['admin/config/search/metatags/config/%metatag_config/revert'] = array(
-    'title' => 'Revert',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('metatag_config_delete_form', 5),
-    'access callback' => 'metatag_config_access',
-    'access arguments' => array('revert', 5),
-    'file' => 'metatag.admin.inc',
-    'type' => MENU_LOCAL_TASK,
-  );
-  $items['admin/config/search/metatags/config/%metatag_config/delete'] = array(
-    'title' => 'Delete',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('metatag_config_delete_form', 5),
-    'access callback' => 'metatag_config_access',
-    'access arguments' => array('delete', 5),
-    'file' => 'metatag.admin.inc',
-  );
-  $items['admin/config/search/metatags/config/%metatag_config/export'] = array(
-    'title' => 'Export',
-    'page callback' => 'metatag_config_export_form',
-    'page arguments' => array(5),
-    'access arguments' => array('administer meta tags'),
-    'file' => 'metatag.admin.inc',
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 10,
-  );
-
-  return $items;
-}
-
-/**
  * Implements hook_flush_caches().
  */
 function metatag_flush_caches() {
@@ -267,7 +188,6 @@ function metatag_config_delete($instance) {
 function metatag_config_cache_clear() {
   cache_clear_all('*', 'cache_metatag', TRUE);
   drupal_static_reset('metatag_config_load_with_defaults');
-  ctools_include('export');
   ctools_export_load_object_reset('metatag_config');
 }
 
@@ -398,8 +318,8 @@ function metatag_field_attach_delete_revision($entity_type, $entity) {
 }
 
 /**
- * Implements hook_field_attach_view_alter().
- */
+* Implements hook_field_attach_view_alter().
+*/
 function metatag_field_attach_view_alter(&$output, $context) {
   $entity_type = $context['entity_type'];
   $entity = $context['entity'];
@@ -428,9 +348,12 @@ function metatag_field_attach_view_alter(&$output, $context) {
       // Reload the entity object from cache as it may have been altered by Panels.
       $token_type = token_get_entity_mapping('entity', $entity_type);
       $entities = entity_load($entity_type, array($entity_id));
+
+      // Allow to alter the entity before it is set as token data.
+      drupal_alter('metatags_' . $entity_type . '_token_data', $entities[$entity_id]);
+
       $options['token data'][$token_type] = $entities[$entity_id];
       $options['entity'] = $entities[$entity_id];
-
       // Render the metatags and save to the cache.
       $output['metatags'] = metatag_metatags_view($instance, $metatags, $options);
       cache_set($cid, $output['metatags'], 'cache_metatag');
@@ -443,6 +366,21 @@ function metatag_field_attach_view_alter(&$output, $context) {
 }
 
 /**
+* Implements hook_metatags_node_token_data_alter().
+* Alters node entity object to set summary to be used in token replacements.
+* @param object $entity
+*   In this case it is the node object.
+*/
+function metatag_metatags_node_token_data_alter(&$entity) {
+  $body_field_item = array_shift(field_get_items('node', $entity, 'body'));
+  $langcode = field_language('node', $entity, 'body');
+
+  if (empty($body_field_item['summary'])) {
+    $entity->body[$langcode][0]['summary'] = text_summary($body_field_item['value'], NULL, 160);
+  }
+}
+
+/**
  * Build a renderable array of meta tag output.
  *
  * @param string $instance
@@ -771,7 +709,7 @@ function _metatag_entity_is_page($type, $entity) {
 function metatag_field_attach_rename_bundle($entity_type, $bundle_old, $bundle_new) {
   $instance_old = $entity_type . ':' . $bundle_old;
   $instance_new = $entity_type . ':' . $bundle_new;
-  if ($config = metatag_config_load($instance_old)) {
+  if ($config = metatag_config_load($instance)) {
     $config->instance = $instance_new;
     metatag_config_save($config);
     metatag_config_delete($instance_old);
@@ -890,29 +828,6 @@ function metatag_get_instance($metatag, array $data = array()) {
 }
 
 /**
- * Return the string value of a meta tag.
- *
- * @param $metatag
- *   The meta tag string.
- * @param $data
- *   The array of data for the meta tag class instance.
- * @param $options
- *   An optional array of additional options to pass to the getValue() method
- *   of the meta tag class instance.
- *   - raw: A boolean if TRUE will not perform token replacement.
- *
- * @return
- *   A string value.
- */
-function metatag_get_value($metatag, array $data, array $options = array()) {
-  $value = '';
-  if ($metatag_instance = metatag_get_instance($metatag, $data)) {
-    $value = $metatag_instance->getValue($options);
-  }
-  return $value;
-}
-
-/**
  * Set a variable to be altered in metatag_preprocess_html().
  *
  * @see metatag_get_preprocess_variables()
@@ -972,9 +887,6 @@ function metatag_html_head_alter(&$elements) {
       }
     }
   }
-
-  // Remove the default generator meta tag.
-  unset($elements['system_meta_generator']);
 }
 
 function metatag_metatag_get_form($metatag, array $data = array(), array $options = array()) {
@@ -1078,34 +990,3 @@ function metatag_config_instance_label($instance) {
 
   return $labels[$instance];
 }
-
-/**
- * Title callback for meta tag configuration instances.
- */
-function metatag_config_title($config) {
-  return metatag_config_instance_label($config->instance);
-}
-
-/**
- * Access callback for meta tag configuration instances.
- */
-function metatag_config_access($op, $config = NULL) {
-  if (!user_access('administer meta tags')) {
-    return FALSE;
-  }
-
-  if ($op == 'enable') {
-    return !empty($config->disabled);
-  }
-  elseif ($op == 'disable') {
-    return empty($config->disabled);
-  }
-  elseif ($op == 'delete') {
-    return ($config->export_type & EXPORT_IN_DATABASE) && !($config->export_type & EXPORT_IN_CODE);
-  }
-  elseif ($op == 'revert') {
-    return ($config->export_type & EXPORT_IN_DATABASE) && ($config->export_type & EXPORT_IN_CODE);
-  }
-
-  return FALSE;
-}
